package org.example.day02;

import java.util.Scanner;

/**
 * @author zlxad
 * @version 1.0
 * @description: TODO +
 * 给定一段&quot;密文&quot;字符串s,其中字符都是经过&quot;密码本&quot;映射的，现需要将&quot;密文&quot;解密并且输出<br>    映射的规则 （'a'-'i')分别用('1'-'9')表示；('j'-'z')分别用('10*'-'26*')表示<br>    约束：映射始终唯一<br>
 *
 * 给定一段"密文"字符串s,其中字符都是经过"密码本"映射的，现需要将"密文"解密并且输出
 * 映射的规则 （'a'-'i')分别用('1'-'9')表示；('j'-'z')分别用('10*'-'26*')表示
 * 约束：映射始终唯一
 * @date 2024/3/11 15:22
 */
public class test029 {
    public static void main(String[] args) {
        // 从用户那里接收密文字符串作为输入
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入密文字符串: ");
        String input_cipher = scanner.nextLine();

        // 调用解密函数并输出结果
        String output_plain = decrypt(input_cipher);
        System.out.println("明文字符串: " + output_plain);
    }

    public static String decrypt(String cipher_text) {
        // 定义一个空字符串，用来存储解密后的明文
        String plain_text = "";
        // 初始化一个变量，用来临时存储多位数的数字
        String temp_num = "";
        // 遍历密文中的每一个字符
        for (int i = 0; i < cipher_text.length(); i++) {
            // 取出当前字符
            char ch = cipher_text.charAt(i);
            // 判断当前字符是否是数字
            if (Character.isDigit(ch)) {
                // 如果是数字，就将其加到temp_num中
                temp_num += ch;
            }
            // 如果遇到"*"符号，说明前面的数字表示一个字母
            else if (ch == '*') {
                // 将数字转换成整数
                int num = Integer.parseInt(temp_num);
                // 清空temp_num，以便存储下一个数字
                temp_num = "";
                // 根据映射规则将数字转换为对应的字母
                if (num <= 9) {  // 如果数字是1-9，直接将数字转换成'a'-'i'
                    plain_text += (char) (97 + num - 1);
                } else {  // 如果数字是10-26，将数字转换成'j'-'z'
                    plain_text += (char) (106 + num - 10);
                }
            }
        }
        return plain_text;
    }
}
